package main

import (
	"context"
	"fmt"
	"go_keep_learning/grpc/micro/micropb"

	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
)

func main() {

	//初始化consul配置
	consulConfig := api.DefaultConfig()

	//创建consul对象
	cli, err := api.NewClient(consulConfig)
	if err != nil {
		fmt.Println(err)
	}

	//////服务发现,从consul上获取健康的服务
	////参数
	//service :服务名
	//  tag: 别名
	// passingOnly :是否通过健康检查， true
	//q :查询参数,通常为nil
	////返回值
	//ServiceEntry:存储服务的切片
	//QueryMeta :额外的查询返回值，通常为nil
	//error :错误
	services, _, err := cli.Health().Service("grpc and consul", "qimi", true, nil)
	if err != nil {
		fmt.Println(err)
	}

	for _, v := range services {
		addr := fmt.Sprintf("%s:%d", v.Service.Address, v.Service.Port)

		////////////////////////以下为 grpc 服务远程调用////////////////////////////////
    
		grpcCon, err := grpc.Dial(addr, grpc.WithInsecure())

		if err != nil {
			fmt.Println(err)
		}
		grpcClient := micropb.NewGreeterClient(grpcCon)

		resp, err := grpcClient.SayHello(context.TODO(), &micropb.HelloReq{Name: "wc"})

		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(resp)

	}

}
